The present invention relates to the field of computer graphics, and in particular to methods and apparatus for creating, modifying, and using components to create computer graphics productions. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking and artistically compelling rendered images and animations.
Computer graphics images, animations, and other productions involving computer graphics, such as interactive entertainment software, are created from a number of different components. Generally, components include any data and instructions used to create products and applications that include computer graphics. Components can include three-dimensional models of geometry; texture maps, other arrays of data, lighting, and shading programs used to determine the visual appearance of models; and animation data and deformer functions used to specify changes and motion over time. One or more components are typically stored as a digital asset. A digital asset can be a file, database table, executable program or script, or any other type of persistent data store.
Components can be related or associated with each other. Components may be related together in a hierarchy for ease of use or to specify functionality. For example, a model of a character and a model of the character's hat may be associated together for ease of use. In another example, a set of coordinate transformations may be associated together in a specific order to define a sequence for applying transformations to models. The relationships between two or more components can be specified by the attributes of these components or by attributes of separate components.
Components are typically combined during rendering to produce an animated sequence. For example, geometric models, shading programs and data, lighting, animation data, and deformers all need to be combined correctly to produce a rendered image or scene. The associations or relationships between components can specify how the components should be combined to create a rendered image or scene.
Additionally, due to dependencies and other relationships between components, some activities may need to be performed in a specific order. The activities that create and modify digital assets and their components are sometimes collectively referred to as a digital production pipeline.
Typical digital production pipelines and computer graphics applications organize components for a scene using a single hierarchical data structure. The hierarchical data structure organizes components according to their name, path, and/or other unique identifying information. In this type of hierarchical data structure, a component's location in the hierarchy may correspond with its storage location.
Additionally, many typical computer graphics applications utilize the single, or master, hierarchical data structure of a scene to specify functional relationships between components. For example, the arrangement of coordinate transformations in the master hierarchical data structure specifies the sequence for applying transformations to models. In another example, a set of shading programs may be associated together in a specific order to define a sequence of data flow for determining shading for models.
The use of a single hierarchical data structure to describe the relationships between components has numerous disadvantages. First, this type of hierarchical data structure can include thousands or millions of components, such as geometric models, shading programs and data, lighting, animation data, deformers, transformation hierarchies, simulation data, scene layout specifications, and other types of components. Because there are so many components of so many different types, the creation, modification, manipulation, debugging, and processing of the master hierarchical data structure is unwieldy, error-prone, and time-consuming.
Additionally, different activities within the digital production pipeline view and manipulate the components in a scene differently. For example, modelers creating geometric models may wish to view and manipulate components according to physical relationships, such as the physical relationship between the arm model and the torso model of a character model. Shading artists may wish to view components according to shading relationships, such as the arrangement and sequence of shading programs and data used to determine shading for surfaces. Lighting artists may wish to view components according to lighting relationships, such as the models lit by a particular light. However, because the master hierarchical data structure stores all of the components of a scene, all of the workers on the digital production pipeline are forced to view and manipulate components in the same way. This can dramatically reduce the efficiency in creating and manipulating components.
Another disadvantage arises from the specification of functional relationships between components using the master hierarchical data structure. As discussed above, components are often arranged in the master hierarchical data structure according to their names and paths. The functional relationship between components corresponds to the components' locations within the master hierarchical data structure. If a component is moved or renamed, its location in the master hierarchical data structure may change. As a result, the functional relationship between this component and other components may also change. This can lead to errors and inadvertent changes to the scene.
It is therefore desirable for a system and method to efficiently organize components for one or more scenes. It is further desirable for the system and method to enable components to be viewed and manipulated according to any arbitrary relationships to facilitate worker efficiency. It is still further desirable for the system and method to enable functional relationships between components to be established arbitrarily and independent the components' other attributes and relationships. It is also desirable for the system and method to enable the progressive modification, refinement, or creation of multiple versions or variations of the relationships between components without disrupting activities upstream or downstream in the digital production pipeline.